import java.util.Scanner;

public class Demo1 {
    private static int count = 0;
    public static Object object = new Object();
//    public static void main(String[] args) {
//        Thread t1 = new Thread(()->{
//            while(count==0){
//                System.out.println("t1");
//                //如果循环体内存在IO操作或者 阻塞操作,就会使循环的旋转速度大幅度降低
//                //IO操作会比 load 操作还要慢很多,所以此时就没有优化 load 的必要
//                //且此时的 IO操作 是不能被优化的,因为 IO操作 反复执行的结果是注定不相同的
//                //IO操作从主内存中读取count值,执行操作时,通常会刷新CPU缓存
//            }
//            System.out.println("t1 执行结束!");
//        });
//
//        Thread t2 = new Thread(()->{
//            Scanner scanner = new Scanner(System.in);
//            System.out.println("请输入一个整数:");
//            count = scanner.nextInt();//修改操作一定是在while循环之后执行的,手速比计算机慢
//            //输入后,t1没有结束
//        });
//
//        t1.start();
//        t2.start();
//    }

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                synchronized (object){
                    count++;
                }
            }
        });
        Thread t2 = new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                synchronized (object){
                    count++;
                }
            }
        });
        t1.start();
        t2.start();
        t1.join();
        t2.join();

        System.out.println(count);
    }
}
